﻿using System;
using System.Collections.Generic;
using System.Text;

namespace StringFormat
{
    /*
     每个格式项都采用下面的形式并包含以下组件：

            { 索引[,对齐][:格式字符串]}

            必须使用成对的大括号（“{”和“}”）。

            索引组件
            强制“索引”组件（也叫参数说明符）是一个从 0 开始的数字，可标识对象列表中对应的项。 也就是说，参数说明符为 0 的格式项列表中的第一个对象，参数说明符为 1 的格式项列表中的第二个对象，依次类推。

            通过指定相同的参数说明符，多个格式项可以引用对象列表中的同一个元素。例如，通过指定类似于“{0:X} {0:E} {0:N}”的复合格式字符串，可以将同一个数值设置为十六进制、科学记数法和数字格式。

            每个格式项都可以引用列表中的任一对象。例如，如果有三个对象，则可以通过指定类似于“{1} {0} {2}”的复合格式字符串来设置第二、第一和第三个对象的格式。格式项未引用的对象会被忽略。如果参数说明符指定了超出对象列表范围的项，将导致运行时异常。

            对齐组件
            可选的“对齐”组件是一个带符号的整数，指示首选的设置了格式的字段宽度。 如果“对齐”值小于设置了格式的字符串的长度，“对齐”会被忽略，并且使用设置了格式的字符串的长度作为字段宽度。 如果“对齐”为正数，字段中设置了格式的数据为右对齐；如果“对齐”为负数，字段中的设置了格式的数据为左对齐。 如果需要填充，则使用空白。如果指定“对齐”，就需要使用逗号。

            格式字符串组件
            可选的“格式字符串”组件是适合正在设置格式的对象类型的格式字符串。 如果相应对象是数值，则指定数字格式字符串，如果相应对象是 DateTime 对象，则指定日期和时间格式字符串，或者如果相应对象是枚举值，则指定枚举格式字符串。如果不指定“格式字符串”，则对数字、日期和时间或者枚举类型使用常规（“G”）格式说明符。 如果指定“格式说明符”，需要使用冒号。
     */

    class FormatInformation
    {
        public static void Show()
        {
            string myFName = "Fred";
            string myLName = "Opals";
            int myInt = 100;
            string FormatFName = String.Format("First Name = |{0,10}|", myFName);
            string FormatLName = String.Format("Last Name = |{0,10}|", myLName);
            string FormatPrice = String.Format("Price = |{0,10:C}|", myInt);
            Console.WriteLine(FormatFName);
            Console.WriteLine(FormatLName);
            Console.WriteLine(FormatPrice);

            FormatFName = String.Format("First Name = |{0,-10}|", myFName);
            FormatLName = String.Format("Last Name = |{0,-10}|", myLName);
            FormatPrice = String.Format("Price = |{0,-10:C}|", myInt);
            Console.WriteLine(FormatFName);
            Console.WriteLine(FormatLName);
            Console.WriteLine(FormatPrice);

        }
    }
}
